package com.liru.chat_demo.controller;

import com.liru.chat_demo.model.McpServer;
import com.liru.chat_demo.model.McpTool;
import com.liru.chat_demo.service.McpClientService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;

/**
 * MCP管理操作控制器
 */
@RestController
@RequestMapping("/admin/mcp")
public class McpAdminController {
    // MCP客户端服务
    private final McpClientService mcpClientService;

    // 构造函数注入MCP客户端服务
    public McpAdminController(McpClientService mcpClientService) {
        this.mcpClientService = mcpClientService;
    }

    /**
     * 获取所有MCP服务器
     * @return 所有服务器列表
     */
    @GetMapping("/servers")
    public ResponseEntity<Collection<McpServer>> getAllServers() {
        // 调用服务获取所有服务器并返回
        return ResponseEntity.ok(mcpClientService.getAllServers());
    }

    /**
     * 获取所有MCP工具
     * @return 所有工具列表
     */
    @GetMapping("/tools")
    public ResponseEntity<Collection<McpTool>> getAllTools() {
        // 调用服务获取所有工具并返回
        return ResponseEntity.ok(mcpClientService.getAllTools());
    }

    /**
     * 添加或更新MCP服务器
     * @param server 要添加或更新的服务器
     * @return 添加或更新后的服务器
     */
    @PostMapping("/servers")
    public ResponseEntity<McpServer> addOrUpdateServer(@RequestBody McpServer server) {
        // 调用服务添加或更新服务器并返回结果
        return ResponseEntity.ok(mcpClientService.addOrUpdateServer(server));
    }

    /**
     * 删除MCP服务器
     * @param serverId 服务器ID
     * @return 无内容响应
     */
    @DeleteMapping("/servers/{serverId}")
    public ResponseEntity<Void> deleteServer(@PathVariable String serverId) {
        // 调用服务删除指定ID的服务器
        mcpClientService.deleteServer(serverId);
        // 返回无内容状态
        return ResponseEntity.noContent().build();
    }

    /**
     * 刷新单个MCP客户端
     * @param serverId 服务器ID
     * @return 成功或失败信息
     */
    @PostMapping("/servers/{serverId}/refresh")
    public ResponseEntity<String> refreshClient(@PathVariable String serverId) {
        // 调用服务刷新指定ID的客户端
        boolean success = mcpClientService.refreshClient(serverId);
        if (success) {
            // 如果刷新成功，返回成功信息
            return ResponseEntity.ok("客户端刷新成功");
        } else {
            // 如果刷新失败，返回错误信息
            return ResponseEntity.badRequest().body("客户端刷新失败");
        }
    }

    /**
     * 刷新所有MCP客户端
     * @return 成功信息
     */
    @PostMapping("/refresh")
    public ResponseEntity<String> refreshAllClients() {
        // 调用服务刷新所有客户端
        mcpClientService.refreshAllClients();
        // 返回成功信息
        return ResponseEntity.ok("所有客户端已刷新");
    }
}